package AppConfig;

##########################
#     OmnibusProxy       #
#    Krzysztof Ulman     #
# Politechnika Krakowska #
#      Kraków 2012       #
##########################

use strict;
use warnings;

use Database;

#nazwa pliku z glownymi ustawieniami
our $CONFIG_FILENAME = 'app.conf';

#przechowuje ustawienia w programie
our %properties;

#przechowuje ustawienia specyficzne dla konkretnej wyszukiwarki
our %searchersProperties;

our $dbTmp;

#odczytuje ustawienia z pliku
sub initFromFile {
	my $class = shift;
	my $filename = shift;
	if($filename && $filename ne '') {
		$CONFIG_FILENAME = $filename;
	}
	open(FILE, $CONFIG_FILENAME);
	my $line;
	while($line = <FILE>) {
		chomp $line;
		#usuniecie pustych lini i zakomentowanych
		if($line ne '' && $line !~ m/^#/) {
			my @tab 	= split(/=/, $line);
			my $key 	= $tab[0];
			my $value 	= $tab[1];
			my $counter = 0;
			if($key =~ m/([a-z0-9_-]+)/i) {
				$key = $1;
				$counter++;
			}
			if($value =~ m/([a-z0-9_@.-]+)/i) {
				$value = $1;
				$counter++;
			}
			if($counter == 2) {
				$properties{$key} = $value;
			}
		}
	}
	close(FILE);
}

#pobiera ustawienia z bazy danych
sub initFromDb {
	my $db = Database->new();
	
	#z tabeli config
	$db->selectConfig();
	while((my $name, my $value) = $db->getRow()) {
		$properties{$name} = $value;
	}
	
	#z tabeli searchers_config
	$db->selectSearchersConfig();
	while((my $searcherId, my $name, my $value) = $db->getRow()) {
		$searchersProperties{$searcherId}{$name} = $value;
	}
}

#zwraca wszystkie ustawienia
sub getAllProperties {
	my $self = shift;
	return %properties;
}

#zwraca wartosc dla podanego klucza ustawien
sub getProperty {
	my $self;
	my $property;
	my $searcherId;
	if(@_ == 3) {
		$self 		= shift;
		$property 	= shift;
		$searcherId	= shift;
	} elsif(@_ == 2) {
		$self 		= shift;
		$property 	= shift;
	}
	
	#pobranie wartosci specyficznej dla danej wyszukiwarki
	if($searcherId && $searcherId > 0) {
		if($searchersProperties{$searcherId}{$property}) {
			return $searchersProperties{$searcherId}{$property};
		}
	}
	
	#pobranie ustawienia globalnego
	if($properties{$property}) {
		return $properties{$property};
	} else {
		return undef;
	}
}

1;